<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>开始搜索 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'getting-started-search.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/getting-started-search.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/getting-started-search.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/getting-started-search.html" rel="nofollow" target="_blank">../en/getting-started-search.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">开始使用 Elasticsearch</a></span>
»
<span class="breadcrumb-node">开始搜索</span>
</div>
<div class="navheader">
<span class="prev">
<a href="getting-started-index.html">« 索引一些文档</a>
</span>
<span class="next">
<a href="getting-started-aggregations.html">用聚合分析结果 »</a>
</span>
</div>
<div class="chapter">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="getting-started-search"></a>开始搜索
</h2>
</div></div></div>
<p>
一旦你往一个 Elasticsearch 索引中导入了一些数据，你就可以发送请求到终端 <code class="literal">_search</code> 来搜索数据。

要访问完整的搜索功能套件，要使用 ElasticSearch 的 QUERY DSL 在请求体中指定搜索条件。

在请求 URI 中指定要搜索的索引的名称。
</p>

<p>
比如，下面这个请求获取索引 <code class="literal">bank</code> 中的所有文档，并按 账号(account number) 排序：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/4.console"></div>
<p>
默认情况下，响应的 <code class="literal">hits</code> 部分包含匹配搜索条件的前 10 个文档。
</p>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
  "took" : 63,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
        "value": 1000,
        "relation": "eq"
    },
    "max_score" : null,
    "hits" : [ {
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "0",
      "sort": [0],
      "_score" : null,
      "_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"}
    }, {
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "1",
      "sort": [1],
      "_score" : null,
      "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
    }, ...
    ]
  }
}</pre>
</div>
<p>
响应还提供了关于搜索请求的如下信息：
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">took</code> – Elasticsearch花费了多少时间去执行查询，单位 毫秒
</li>
<li class="listitem">
<code class="literal">timed_out</code> – 搜索请求是否超时
</li>
<li class="listitem">
<code class="literal">_shards</code> – 搜索了多少个分片，以及有多少个分片成功、失败或被跳过。
</li>
<li class="listitem">
<code class="literal">max_score</code> – 找到的最相关的文档的评分
</li>
<li class="listitem">
<code class="literal">hits.total.value</code> - 找到了多少个匹配的文档
</li>
<li class="listitem">
<code class="literal">hits.sort</code> - 文档的排序位置(当不按相关性得分排序时)
</li>
<li class="listitem">
<code class="literal">hits._score</code> - 文档的相关性评分(在使用 <code class="literal">match_all</code> 时不适用)
</li>
</ul>
</div>
<p>
每个搜索请求都是独立的(self-contained)：ElasticSearch不会在请求之间维护任何状态信息。

要按页浏览搜索命中，在请求参数中指定 <code class="literal">from</code> and <code class="literal">size</code> 参数。
</p>
<p>
比如，下面的请求得到命中的 10 到 19 个结果：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ],
  "from": 10,
  "size": 10
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/5.console"></div>
<p>
既然你已经了解了如何提交基本的搜索请求，就可以开始构建比 <code class="literal">match_all</code> 更有趣的查询了。
</p>
<p>
若要在字段中搜索特定的词项，可以使用 <code class="literal">match</code> 查询。

例如，以下请求在字段 <code class="literal">address</code> 中搜索地址包含  <code class="literal">mill</code> 或 <code class="literal">lane</code> 的客户：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/6.console"></div>
<p>
若要执行 <em>短语搜索 (phrase search)</em> 而不是匹配单个词项，请使用 <code class="literal">match_phrase</code> 而不是 <code class="literal">match</code>。

比如，下面这个搜索只匹配地址包含短语 <code class="literal">mill lane</code> 的：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/7.console"></div>
<p>
要构建更复杂的查询，可以使用 <code class="literal">bool</code> 查询去合并多个查询条件。

你可以根据 需要(必须匹配, must match)、期望(应该匹配, should match)或不希望(必须不匹配, must not match) 指定条件。
</p>
<p>
比如，以下请求在索引 <code class="literal">bank</code>  中搜索 客户年龄是 40 岁，但不包括居住在 Idaho(ID) 的客户的帐户：
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/8.console"></div>
<p>
布尔查询中的每个 <code class="literal">must</code>、<code class="literal">should</code> 和 <code class="literal">must_not</code> 元素都称为查询子句。

文档在每个 <code class="literal">must</code> 或 <code class="literal">should</code> 子句中满足条件的程度，决定了文档的 <em>相关性评分(relevance score)</em>。

得分越高，文档与条件的匹配度越高。

默认情况下，Elasticsearch 返回的文档按这些相关性得分排序。
</p>
<p>
条件中的 <code class="literal">must_not</code> 字句被看成是一个 <em>过滤器(filter)</em> 。

它影响文档是否包含在结果中，但不参与文档的评分。

还可以显式指定任意过滤器，以包含或排除基于结构化数据的文档。
</p>
<p>
例如，下面的请求使用一个范围过滤器去将结果限制在 余额在$20,000 到 $30,000(含) 之间的账户。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/9.console"></div>
</div>
<div class="navfooter">
<span class="prev">
<a href="getting-started-index.html">« 索引一些文档</a>
</span>
<span class="next">
<a href="getting-started-aggregations.html">用聚合分析结果 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>